package 区间;

import MyUtils.ListUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * foreach 好用的快捷键
 *     map.for
 *     int[][].for
 *
 * [这题不好!]
 *      迭代 比 2个右边界 -> 根本想不到，所以不哦用扣特殊情况了 -> 太乱此题
 *
 *
 * -l- --- ---
 * --r-- ---- -----
 *
 */
public class 区间列表的交集986_题很一般 {
    /*LBLD*/
    public int[][] intervalIntersection_LBLD(int[][] firstList, int[][] secondList) {
        // 双指针 w 起手式
        int i=0, j=0, n1=firstList.length, n2=secondList.length;
        List<int[]> res = new ArrayList<>();
        while (i<n1 && j<n2){
            int a1 = firstList[i][0], a2 = firstList[i][1];
            int b1 = secondList[j][0], b2 = secondList[j][1];
            // 是用 公式 找出的 -> 有相交 （左右半拉 or 覆盖）
            if(a2 >= b1 && b2 >= a1){
                // [左大，右小]
                res.add(new int[]{Math.max(a1,b1), Math.min(a2,b2)});
            }
            // 迭代 -> 比 2个 右 边界（高智商？） -> 这里根本想不到，所以不哦用扣特殊情况了 -> 太乱此题
            if(a2 <= b2){
                i++;
            }else {
                j++;
            }
        }
        // list -> [][]
        int[][] resShuZu = ListUtils.scopeListToShuZu(res);
        return resShuZu;
    }

    /* 自 笨法 没必要写了 -> 纯浪费时间 -> 立刻 LBLD */
    public int[][] intervalIntersection_me(int[][] firstList, int[][] secondList) {
//        // 这题 如果 不先在 草稿上 写 完整代码 -> 必乱套
//
//        // A、B -> 塞入一个TreeMap
//        TreeMap<int[], String> map = new TreeMap<>(new Comparator<int[]>() {
//            // 按key排序: 同头 尾反 -> map 和 堆 都是 new 时 构造 内部顺序， 不用 Collects
//            @Override
//            public int compare(int[] a, int[] b) {
//                if(a[0] != b[0]){
//                    return a[0]-b[0];
//                }
//                return b[1]-a[1];
//            }
//        });
//
//        // 标记 A B
//        putJuZhenInMap(firstList, map, "A");
//        putJuZhenInMap(secondList, map, "B");
//
//        List<int[]> resUnionList = new ArrayList<>();
//        // 取交集
//        for (int[] scope : map.keySet()) {
//            int cL = scope[0], cR = scope[1];
//            int
//        }
//        Iterator<int[]> iterator = map.keySet().iterator();
//        while(iterator.hasNext()){
//            int[] next = iterator.next();
//            iterator.
//        }
        return null;
    }


}
